import axios from "axios";

// import store from "../store";

// 所有错误对象
const messages = {
  401: "未授权",
  403: "禁止访问",
  404: "资源找不到",
  500: "服务器内部错误",
};

// 创建axios实例
const request = axios.create({
  // 公共请求前缀
  baseURL: "/api",
  // 公共请求参数放在header中
  headers: {},
  // 超时时间
  timeout: 10000,
});

// 请求拦截器
request.interceptors.request.use(config => {
  // 用户登录了
  // const token = JSON.parse(localStorage.getItem("user"));
  // 只要有token就给请求头添加一个token
  // if (token) {
  // config.headers.token = token;
  // }

  config.headers.token =
    "caee0d907fafd21f3e078fb82e337df54a3c18eb577633419cd31d8dc7b78947d106471d18c1d4a4";

  // config是请求的配置对象，将来发送请求的配置都是从config中读取的
  return config;
});

// 响应拦截器
request.interceptors.response.use(
  response => {
    // 请求成功，但是功能不一定成功
    if (response.data.code === 200) {
      // 只有返回200才是功能成功
      // 返回成功的状态
      return response.data;
    } else {
      // 功能失败
      // 返回失败的状态和原因
      return Promise.reject(response.data.message || "未知错误，请联系管理员");
    }
  },
  e => {
    // 响应失败/请求失败
    let message = "未知错误，请联系管理员";

    if (e.response) {
      // 响应回来了
      message = messages[e.response.status];
    } else {
      // 响应没有回来
      if (e.message.indexOf("timeout") > -1) {
        message = "网络超时，请连接WIFI试试";
      } else if (e.message.indexOf("Network") > -1) {
        message = "断网了，请打开网络链接试试";
      }
    }

    return Promise.reject(message);
  }
);

// 将request导出
export default request;
